﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using ComputerVision.Common;

namespace ComputerVision
{
    public partial class frmKichHoat : Form
    {
        private LicenseUtil license = null;
        private MD5 md5Hash = null;
        private frmMain main = null;
        private ModifyRegistry myRegistry = null;
        public frmKichHoat(frmMain frm)
        {
            InitializeComponent();
            this.main = frm;
            license = new LicenseUtil();
            
            md5Hash = MD5.Create();

            myRegistry = new ModifyRegistry();
            myRegistry.ShowError = false;

            txtMaSanPham.Text = license.ProductKey;
            txtMakichHoat.Text = license.ReadFile().Trim();

            if (license.VerifyMd5Hash(md5Hash, txtMaSanPham.Text.Trim(), txtMakichHoat.Text.Trim()) && license.VerifyTime(false))
            {
                lblDaKichHoat.Visible = true;
                picDaKichHoat.Visible = true;
                txtMakichHoat.Enabled = false;
                btKichHoat.Text = @"Thay mã";
            }
        }

        private void btKichHoat_Click(object sender, EventArgs e)
        {
            if (txtMakichHoat.Enabled == false)
            {
                btKichHoat.Text = @"Kích hoạt";
                txtMakichHoat.Enabled = true;

            }
            else
            {
                if (license.VerifyMd5Hash(md5Hash, txtMaSanPham.Text.Trim(), txtMakichHoat.Text.Trim()))
                {
                    string valueReg = myRegistry.Read("Map");
                    string valueRegTime = myRegistry.Read("Cognos");
                    string valueRegIbm = myRegistry.Read("IBM");
                    if (valueReg == null && valueRegTime == null)
                    {
                        if (myRegistry.Write("Map", DateTime.Now.AddDays(license.Time)) && myRegistry.Write("Cognos", license.HashTime))
                        {
                            if (license.WriteFile(txtMakichHoat.Text.Trim()))
                            {
                                MessageBox.Show(@"Kích hoạt thành công.", @"Thông báo", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                                this.main.ShowHideMenu();
                                this.Close();

                            }
                            else
                            {
                                MessageBox.Show(@"Gặp lỗi khi kích hoạt. Hãy liên hệ quản trị phần mềm. (Code: 11)", @"Thông báo", MessageBoxButtons.OK,
                                             MessageBoxIcon.Error);
                            }

                        }
                        else
                        {
                            MessageBox.Show(@"Gặp lỗi khi kích hoạt. Hãy liên hệ quản trị phần mềm. (Code: 20)", @"Thông báo", MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        }

                    }
                    else
                    {
                        if (valueRegTime != null)
                        {
                            if (license.HashTime == valueRegTime)
                            {

                                if (license.VerifyTime())
                                {
                                    if (license.WriteFile(txtMakichHoat.Text.Trim()))
                                    {
                                        MessageBox.Show(@"Kích hoạt thành công.", @"Thông báo", MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                                        this.main.ShowHideMenu();
                                        this.Close();
                                    }
                                    else
                                    {
                                        MessageBox.Show(@"Gặp lỗi khi kích hoạt. Hãy liên hệ quản trị phần mềm. (Code: 12)", @"Thông báo", MessageBoxButtons.OK,
                                                     MessageBoxIcon.Error);
                                    }
                                }
                            }
                            else
                            {
                                if (!this.ExpiredList().Contains(license.HashTime))
                                {
                                    if (myRegistry.Write("Map", DateTime.Now.AddDays(license.Time)) && myRegistry.Write("Cognos", license.HashTime) &&
                                        myRegistry.Write("IBM", valueRegIbm + valueRegTime + "|") && license.WriteFile(txtMakichHoat.Text.Trim()))
                                    {
                                        MessageBox.Show(@"Kích hoạt thành công.", @"Thông báo", MessageBoxButtons.OK,
                                            MessageBoxIcon.Information);
                                        LicenseUtil.SaveDateTime();
                                        this.main.ShowHideMenu();
                                        this.Close();
                                    }
                                    else
                                    {
                                        MessageBox.Show(
                                            @"Gặp lỗi khi kích hoạt. Hãy liên hệ quản trị phần mềm. (Code: 13)",
                                            @"Thông báo", MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show(
                                            @"Mã kích hoạt này đã hết hạn. Xin vui lòng sử dụng mã khác.",
                                            @"Thông báo", MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                                }
                            }
                        }
                        else
                        {
                            if (myRegistry.Write("Map", DateTime.Now.AddDays(license.Time)) && myRegistry.Write("Cognos", license.HashTime) && license.WriteFile(txtMakichHoat.Text.Trim()))
                            {
                                MessageBox.Show(@"Kích hoạt thành công.", @"Thông báo", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                                this.main.ShowHideMenu();
                                this.Close();
                            }
                            else
                            {


                                MessageBox.Show(@"Gặp lỗi khi kích hoạt. Hãy liên hệ quản trị phần mềm. (Code: 14)", @"Thông báo", MessageBoxButtons.OK,
                                                 MessageBoxIcon.Error);
                            }
                        }

                    }


                    //if (license.WriteFile(txtMakichHoat.Text.Trim()))
                    //{
                    //    MessageBox.Show(@"Kích hoạt thành công.", @"Thông báo", MessageBoxButtons.OK,
                    //                    MessageBoxIcon.Information);
                    //    this.main.ShowHideMenu();
                    //    this.Close();
                    //}
                }
                else
                {
                    MessageBox.Show(@"Mã kích hoạt không hợp lệ.", @"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

        private string[] ExpiredList()
        {
            string temp = myRegistry.Read("IBM");
            string[] result = null;

            if (temp == null) result = new string[0];
            else
                result = temp.Split('|');

            return result;
        }


        private void btHuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtMaSanPham_MouseDown(object sender, MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }
    }
}
